#include "../include/json_serializer.h"
#include "../include/common.h"

#include <nlohmann/json.hpp>

// 序列化 
template<typename T>
std::string scRpc::JsonSerializer::Serialize(const T& obj) {
	return nlohmann::json(obj).dump();
}
// 反序列化
template<typename T>
bool scRpc::JsonSerializer::Deserialize(const std::string& data, T& obj) {
	// 抓 exception
	try {
		obj = nlohmann::json::parse(data).get<T>();
		return true;
	}
	catch(...) {
		return false;
	}
}

// 显式实例化需要的模板
template bool scRpc::JsonSerializer::Deserialize<scRpc::RpcRequest>(const std::string&, scRpc::RpcRequest&);
template bool scRpc::JsonSerializer::Deserialize<scRpc::RpcResponse>(const std::string&, scRpc::RpcResponse&);
template std::string scRpc::JsonSerializer::Serialize<scRpc::RpcRequest>(const scRpc::RpcRequest&);
template std::string scRpc::JsonSerializer::Serialize<scRpc::RpcResponse>(const scRpc::RpcResponse&);